From 18a62c66f01cf28cd751851bfdaf10a19abc95f2 Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Fri, 5 Aug 2005 15:11:46 +0000 Subject: [PATCH] Fix mach2phys table allocation for 32-bit PAE Xen. Found by Gerd Knorr. --- xen/arch/x86/x86_32/mm.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/x86_32/mm.c b/xen/arch/x86/x86_32/mm.c index ed6382cb92..22021a8e36 100644 --- a/xen/arch/x86/x86_32/mm.c +++ b/xen/arch/x86/x86_32/mm.c @@ -98,8 +98,10 @@ void __init paging_init(void) * installed, but at least 4MB to cover 4GB address space. This is needed * to make PCI I/O memory address lookups work in guests. */ - if ( (mpt_size = max_page * 4) < (4*1024*1024) ) - mpt_size = 4*1024*1024; + mpt_size = (max_page * 4) + (1UL << L2_PAGETABLE_SHIFT) - 1UL; + mpt_size &= ~((1UL << L2_PAGETABLE_SHIFT) - 1UL); + if ( mpt_size < (4 << 20) ) + mpt_size = 4 << 20; for ( i = 0; i < (mpt_size >> L2_PAGETABLE_SHIFT); i++ ) { if ( (pg = alloc_domheap_pages(NULL, PAGETABLE_ORDER, 0)) == NULL ) -- 2.30.2